home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / RWHODUMP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-23  |  3.1 KB  |  119 lines

  1. #include "global.h"
  2. #include <time.h>
  3. #include "mbuf.h"
  4. #include "trace.h"
  5.  
  6. #if !defined(_lint)
  7. static char rcsid[] OPTIONAL = "$Id: rwhodump.c,v 1.10 1996/12/23 20:37:36 root Exp root $";
  8. #endif
  9.  
  10. struct outmp {
  11.     char out_line[9];   /* tty name */
  12.     char out_name[9];   /* user id */
  13.     time_t out_time; /* time on */
  14. };
  15.  
  16.  
  17. struct whod {
  18.     char wd_vers;
  19.     char wd_type;
  20.     char wd_fill[2];
  21.     time_t  wd_sendtime;
  22.     time_t  wd_recvtime;
  23.     char wd_hostname[33];
  24.     int32  wd_loadav[3];
  25.     time_t  wd_boottime;
  26.     struct    whoent {
  27.         struct    outmp we_utmp;
  28.         int32  we_idle;
  29.         } wd_we[1024 / sizeof (struct whoent)];
  30. };
  31.  
  32.  
  33.  
  34. static int ntohrwhod (struct whod *wp,struct mbuf **bpp);
  35. void rwho_dump (FILE *fp,struct mbuf **bpp);
  36.  
  37. void
  38. rwho_dump(fp,bpp)
  39. FILE *fp;
  40. struct mbuf **bpp;
  41. {
  42.     int i;
  43.     int32 t;
  44.     char *cp;
  45.     struct whod rwhod;
  46.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  47.         return;
  48.     traceprintf(fp,"RWHO: ");
  49.     if(ntohrwhod(&rwhod,bpp) == -1) {
  50.         traceprintf(fp,"bad data\n");
  51.         return;
  52.     }
  53.     if(rwhod.wd_vers != 1)
  54.         traceprintf(fp,"version %d  ",rwhod.wd_vers);
  55.     if(rwhod.wd_type != 1)
  56.             traceprintf(fp,"type %d  ",rwhod.wd_type);
  57.     cp = ctime(&rwhod.wd_sendtime);
  58.     cp[24] = '\0';
  59.     traceprintf(fp,"send %s  ",cp);
  60.     t = (int32) rwhod.wd_recvtime;
  61.     if(t / 86400)
  62.         traceprintf(fp,"%ld:",t/86400);
  63.     t %= 86400;
  64.     traceprintf(fp,"recv %02ld:%02ld\n",t / 3600,(t % 3600)/60);
  65.     traceprintf(fp,"      host %s  loadvg %ld %ld %ld  ",rwhod.wd_hostname,
  66.         rwhod.wd_loadav[0],rwhod.wd_loadav[1],
  67.         rwhod.wd_loadav[2]);
  68.         traceprintf(fp,"boot %s",ctime(&rwhod.wd_boottime));
  69.     i = 0;
  70.     while(rwhod.wd_we[i].we_utmp.out_line[0] != '\0') {
  71.         traceprintf(fp,"      %-12s%-12s",rwhod.wd_we[i].we_utmp.out_name,
  72.         rwhod.wd_we[i].we_utmp.out_line);
  73.         t = rwhod.wd_we[i].we_idle;
  74.         if(t / 86400)
  75.             traceprintf(fp,"%ld:",t/86400);
  76.         else
  77.             traceprintf(fp,"  ");
  78.         t %= 86400;
  79.         traceprintf(fp,"%02ld:%02ld    ",t / 3600, (t % 3600)/60);    
  80.         traceprintf(fp,"%s",ctime(&rwhod.wd_we[i].we_utmp.out_time));
  81.         ++i;
  82.     }
  83. }
  84. static int
  85. ntohrwhod(wp,bpp)
  86. struct whod *wp;
  87. struct mbuf **bpp;
  88. {
  89.     int i;
  90.     char wbuf[60];
  91.     if(pullup(bpp, (unsigned char *) wbuf,60) != 60)
  92.         return -1;
  93.     wp->wd_vers = wbuf[0];
  94.     wp->wd_type = wbuf[1];
  95.     wp->wd_fill[0] = wbuf[2];
  96.     wp->wd_fill[1] = wbuf[3];
  97.     wp->wd_sendtime = (time_t) get32(&wbuf[4]);
  98.     wp->wd_recvtime = (time_t) get32(&wbuf[8]);
  99.     memcpy(wp->wd_hostname,&wbuf[12],32);
  100.     wp->wd_hostname[32] = '\0';
  101.     wp->wd_loadav[0] = (int32) get32(&wbuf[44]);
  102.     wp->wd_loadav[1] = (int32) get32(&wbuf[48]);
  103.     wp->wd_loadav[2] = (int32) get32(&wbuf[52]);
  104.     wp->wd_boottime = (time_t) get32(&wbuf[56]);
  105.     for(i = 0; i < 39; ++i) {
  106.         if(pullup(bpp,(unsigned char *) wbuf,24) != 24) {
  107.             wp->wd_we[i].we_utmp.out_line[0] = '\0';
  108.             return 0;
  109.         }
  110.         memcpy(wp->wd_we[i].we_utmp.out_line,wbuf,8);
  111.         wp->wd_we[i].we_utmp.out_line[8] = '\0';
  112.         memcpy(wp->wd_we[i].we_utmp.out_name,&wbuf[8],8);
  113.         wp->wd_we[i].we_utmp.out_name[8] = '\0';
  114.         wp->wd_we[i].we_utmp.out_time = (time_t) get32(&wbuf[16]);
  115.         wp->wd_we[i].we_idle = (long) get32(&wbuf[20]);
  116.     }
  117.     return 0;
  118. }
  119.